package com.zhixi.pattern.important.strategypattern;

import com.zhixi.pattern.important.strategypattern.operation.Context;
import com.zhixi.pattern.important.strategypattern.operation.OneStrategy;
import com.zhixi.pattern.important.strategypattern.operation.ThreeStrategy;
import com.zhixi.pattern.important.strategypattern.operation.TwoStrategy;

/**
 * 策略模式（类似代理模式）
 *
 *  刘备三顾茅庐
 *  一个接口（AbstractStrategy），多个扩展类（OneStrategy、TwoStrategy、ThreeStrategy）
 *  可以把每一次请诸葛亮出山当作一次策略来看
 *
 *  策略模式一般不会单独使用，因为单独使用所有策略都需要暴露出去
 *  所以一般搭配其他设计模式一起使用（比如：工厂方法模式）
 *
 * @作者 ShuHaoNan
 * @邮箱 shuhaonan1@gmail.com
 * @时间 2020/11/17 15:50
 */
public class StrategyPattern {

    public static void main(String[] args) {
        Context context;
        /* 第一次请诸葛亮出山 */
        context = new Context(new OneStrategy());
        context.operate();
        /* 第二次请诸葛亮出山 */
        context = new Context(new TwoStrategy());
        context.operate();
        /* 第三 次请诸葛亮出山 */
        context = new Context(new ThreeStrategy());
        context.operate();
    }

}
